/***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is Tilt: A WebGL-based 3D visualization of a webpage.
 *
 * The Initial Developer of the Original Code is The Mozilla Foundation.
 * Portions created by the Initial Developer are Copyright (C) 2011
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *   Victor Porof <victor.porof@gmail.com> (original author)
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the LGPL or the GPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 ***** END LICENSE BLOCK *****/
"use strict";

var Tilt = Tilt || {};
var EXPORTED_SYMBOLS = ["Tilt.Mesh"];

/**
 * Saves the mesh as a .obj file to be used with an external editor.
 *
 * @param {String} directory: the directory to save the mesh into
 * @param {String} name: the mesh name
 */
Tilt.Mesh.prototype.save = function(directory, name) {
  var output = [],
    material = [],
    v = this.vertices.components,
    t = this.texCoord.components,
    f = this.indices.components,
    i, j, k, len, str, s;

  output.push("mtllib " + name + ".mtl",
              "usemtl webpage");

  material.push("newmtl webpage",
                "illum 2",
                "Ka 1.000 1.000 1.000",
                "Kd 1.000 1.000 1.000",
                "Ks 0.000 0.000 0.000",
                "map_Ka " + name + ".png",
                "map_Kd " + name + ".png",
                "map_Ks " + name + ".png");

  for (i = 0, len = v.length; i < len; i += 3) {
    output.push("v " + (v[i    ] / +100) + " " +
                       (v[i + 1] / -100) + " " +
                       (v[i + 2] / +100));
  }
  for (i = 0, len = t.length; i < len; i += 2) {
    output.push("vt " + (    t[i    ]) + " " +
                        (1 - t[i + 1]));
  }
  for (i = 0, len = f.length; i < len; i += 3) {
    output.push("f " + (f[i    ] + 1) + "/" + (f[i    ] + 1) + " " +
                       (f[i + 1] + 1) + "/" + (f[i + 1] + 1) + " " +
                       (f[i + 2] + 1) + "/" + (f[i + 2] + 1));
  }

  s = Tilt.File.separator;
  Tilt.File.save(output.join("\n"), directory + s + name + ".obj");
  Tilt.File.save(material.join("\n"), directory + s + name + ".mtl");
};
